package com.mig.coins.db;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

import com.mig.coins.db.Consultas;

public class Pedido extends Consultas {
	public final static int ESTADO_RESERVA = 1;
	public final static int ESTADO_EN_PROCESO = 2;
	public final static int ESTADO_CERRADO = 3;
	
	private long id = 0;
	private String descripcion = null;
	private String proveedor = null;
	private Date fecha = null;
	private int estado = 0;
	private String observaciones = null;

	private final static String GET_PEDIDO_SQL = "select `id`, `descripcion`, `proveedor`, `fecha`, " +
	"`estado`, `observaciones` from pedidos";

	public Long insert(Connection conn) {
		// Validaciones para insertar
		// Insertar
		// Obtiene el id y lo guarda
		return null;
	}

	public boolean delete(Connection conn) {

		return false;
	}

	public boolean update(Connection conn) {
		return false;
	}

	public static Pedido readPedido(Connection conn, long _id) throws SQLException {
		Pedido _pedido = new Pedido(); 
		PreparedStatement stmt=null;
		ResultSet rs = null;

		stmt=conn.prepareStatement(GET_PEDIDO_SQL + " WHERE id=?");
		stmt.setLong(1, _id);
		rs = stmt.executeQuery();
		if (rs.next()) 
			_pedido.loadPedidoFromResultSet(rs);
		else 
			_pedido = null;

		if (rs != null) rs.close();
		if (stmt != null) stmt.close(); 

		return _pedido;
	}

	public static ArrayList<Pedido> searchPedidos(Connection conn, String where, String sort) throws SQLException {
		String query = GET_PEDIDO_SQL;
		if ((where != null) && (where.trim().length()>0)) {
			query +="WHERE " + where + " ";
		}
		if ((sort != null) && (sort.trim().length()>0)) {
			query +=" ORDER BY " + sort + " ";
		}
		// Creamos el Statement y el ResultSet.
		Statement stm = conn.createStatement();
		ResultSet rs = stm.executeQuery(query);

		// Procesamos el ResultSet.
		ArrayList<Pedido> lPedido = null;
		while (rs.next()) {
			Pedido _pedido = new Pedido();
			_pedido.loadPedidoFromResultSet(rs);
			if (null == lPedido)
				lPedido = new ArrayList<Pedido>();
			lPedido.add(_pedido);
		}
		rs.close();
		stm.close();
		return lPedido;
	}

	public void loadPedidoFromResultSet(ResultSet rs) throws SQLException {
		this.id = rs.getLong(1);
		this.descripcion = rs.getString(2);
		this.proveedor = rs.getString(3);
		this.fecha = rs.getDate(4);
		this.estado = rs.getInt(5);
		this.observaciones = rs.getString(6);
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public String getProveedor() {
		return proveedor;
	}

	public void setProveedor(String proveedor) {
		this.proveedor = proveedor;
	}

	public Date getFecha() {
		return fecha;
	}

	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}

	public int getEstado() {
		return estado;
	}

	public void setEstado(int estado) {
		this.estado = estado;
	}

	public String getObservaciones() {
		return observaciones;
	}

	public void setObservaciones(String observaciones) {
		this.observaciones = observaciones;
	}

    public static ArrayList<ArrayList<String>> getListaEstados() throws SQLException {
    	final String query= "SELECT `id`, `estado` FROM `estados_pedido` ORDER BY `id`";
        return getQueryResult(query, 2);
    }
}
